/**
 * @file version.c
 * @brief 通用版本信息实现
 * @details 本文件实现了通用版本信息功能，支持多种协议类型
 * 
 * @author zyb
 * @date 2025-09-26
 * @version 1.0
 */

#include "version.h"
#include "version_generated.h"
#include "../../config/include/cfg_utils.h"
#include <stdio.h>
#include <string.h>

/**
 * @brief 获取项目版本信息
 * @details 从配置中获取项目的版本字符串
 * 
 * @return 版本字符串
 */
const char* get_project_version(void) {
    static char version[32] = "1.0.0";
    
    // 尝试从配置文件读取版本
    if (app_config_load("project.conf") == CFG_SUCCESS) {
        app_config_t config;
        if (app_config_get(&config) == CFG_SUCCESS) {
            strncpy(version, config.version, sizeof(version) - 1);
            version[sizeof(version) - 1] = '\0';
        }
    }
    
    return version;
}

/**
 * @brief 获取项目构建信息
 * @details 获取项目的构建信息
 * 
 * @return 构建信息字符串
 */
const char* get_build_info(void) {
    static char build_info[128];
    const char* version = get_project_version();
    snprintf(build_info, sizeof(build_info), "%s v%s", PROJECT_NAME_STRING, version);
    return build_info;
}

/**
 * @brief 获取完整版本字符串
 * @details 获取包含项目名的完整版本字符串
 * 
 * @return 完整版本字符串
 */
const char* get_full_version(void) {
    static char full_version[128];
    const char* version = get_project_version();
    snprintf(full_version, sizeof(full_version), "%s v%s", PROJECT_NAME_STRING, version);
    return full_version;
}

/**
 * @brief 获取可执行程序名称
 * @details 获取根据版本规则生成的可执行程序名称
 * 
 * @return 可执行程序名称
 */
const char* get_executable_name(void) {
    return "dlsystem-protocol";
}

/**
 * @brief 获取项目名称
 * @details 获取项目名称字符串
 * 
 * @return 项目名称
 */
const char* get_project_name(void) {
    return PROJECT_NAME_STRING;
}

